package bean;

import java.io.Serializable;
import java.util.Iterator;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;

import service.Funcionario_service;
import sun.text.normalizer.ICUBinary.Authenticate;

import dao.Funcionario_DAO_Imp;


import model.Empresa;
import model.Funcionario;

@ManagedBean
@SessionScoped
public class Funcionario_bean implements Serializable{
	
	private Funcionario funcionario = new Funcionario();
	//private Funcionario funcionario;
	private Empresa empresa = new Empresa();
	private DataModel listaDeFuncionarios;
	
	
	public Funcionario_bean(){
		funcionario = new Funcionario();
		
		SecurityContext context = SecurityContextHolder.getContext();
		if (context instanceof SecurityContext){
			Authentication authentication = context.getAuthentication();
			if (authentication instanceof Authentication){
				funcionario.setLogin(((User)authentication.getPrincipal()).getUsername());
			}
		}
	}
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public DataModel getListaDeFuncionarios() {		
		Funcionario_service funcionarioRN = new Funcionario_service();
		List<Funcionario> lista = funcionarioRN.listaTodos();
		listaDeFuncionarios = new ListDataModel(lista);	
		return listaDeFuncionarios;
	}

	public void setListaDeFuncionarios(DataModel listaDeFuncionarios) {
		this.listaDeFuncionarios = listaDeFuncionarios;
	}

	public String atualizar(){
		funcionario = (Funcionario)(listaDeFuncionarios.getRowData());
		//FuncionarioRN funcionarioRN = new FuncionarioRN();
		//funcionarioRN.atualizar(funcionario);
		return "edit_funcionario";
	}

	public String salvar(){		
		funcionario.setEmpresa(empresa);
		Funcionario_service funcionarioRN = new Funcionario_service();
		//if em contains funcionario
		funcionarioRN.salvar(funcionario);
		return "index";
	}
	
	public String remover(){
		Funcionario funcionarioTemp = (Funcionario)(listaDeFuncionarios.getRowData());
		Funcionario_service funcionarioRN = new Funcionario_service();
		funcionarioRN.remover(funcionarioTemp.getId());
		return "index";
	}
	
	public Funcionario localizar(Long id){
		Funcionario_service funcionarioRN = new Funcionario_service();
		funcionario = funcionarioRN.localizar(7);
		return funcionario;
	}
	
	public String novo(){
		funcionario = new Funcionario();
		funcionario.setId(null);
		return "edit_funcionario";
	}
	
	
	public List<Funcionario> listarTodos(){		
		Funcionario_service funcionarioRN = new Funcionario_service();
		List<Funcionario> lista = funcionarioRN.listaTodos();
		return lista;
	}
	
	public String voltar(){
		funcionario = new Funcionario();
		return "list_funcionario";
	}
		
	
	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}		
	
	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
}
